From 071a4e5f83db6a0e0ab01a36110e7bf6bbbaca2c Mon Sep 17 00:00:00 2001 From: Adel Gadllah Date: Sat, 2 Mar 2013 13:25:37 +0100 Subject: [PATCH] shell-global: Don't connect to the stage's paint signal Doing so causes useless full stage redraws and breaks culling as clutter cannot know how the signal handler affects painting. So use clutter_threads_add_repaint_func_full instead. https://bugzilla.gnome.org/show_bug.cgi?id=694988 --- src/shell-global.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/shell-global.c b/src/shell-global.c index 6f20e8c2c..7e091dbdf 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -803,16 +803,14 @@ global_stage_notify_height (GObject *gobject, } static void -global_stage_before_paint (ClutterStage *stage, - ShellGlobal *global) +global_stage_before_paint (gpointer data) { shell_perf_log_event (shell_perf_log_get_default (), "clutter.stagePaintStart"); } static void -global_stage_after_paint (ClutterStage *stage, - ShellGlobal *global) +global_stage_after_paint (gpointer data) { shell_perf_log_event (shell_perf_log_get_default (), "clutter.stagePaintDone"); @@ -939,10 +937,13 @@ _shell_global_set_plugin (ShellGlobal *global, g_signal_connect (global->stage, "notify::height", G_CALLBACK (global_stage_notify_height), global); - g_signal_connect (global->stage, "paint", - G_CALLBACK (global_stage_before_paint), global); - g_signal_connect_after (global->stage, "paint", - G_CALLBACK (global_stage_after_paint), global); + clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT, + (GSourceFunc) global_stage_before_paint, + NULL, NULL); + + clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT, + (GSourceFunc) global_stage_after_paint, + NULL, NULL); shell_perf_log_define_event (shell_perf_log_get_default(), "clutter.stagePaintStart", -- 2.39.5